package com.itHsuSE.experiment;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

// 泛型类，用于存储实体对象
class Entity<T> implements Serializable{//实现了接口Serializable
    // 私有列表用于存储实体对象
    private List<T> entityList = new ArrayList<>();

    // 插入实体对象
    public void insert(T entity) {
        entityList.add(entity);
    }

    // 删除实体对象
    public void delete(T entity) {
        entityList.remove(entity);
    }

    // 获取存储的实体对象列表
    public List<T> getList() {
        return entityList;
    }
}

// 用户实体类
class User implements Serializable{//实现了接口Serializable
    private String name;     // 用户姓名
    private String userId;   // 用户编号

    // 获取用户姓名
    public String getName() {
        return name;
    }

    // 获取用户编号
    public String getUserId() {
        return userId;
    }

    // 用户构造函数，接受姓名和编号
    public User(String name, String userId) {
        this.name = name;
        // 校验编号
        if (isValidUserId(userId)) {// 编号有效
            this.userId = userId;
        } else {// 编号无效
            throw new IllegalArgumentException(userId + " 为无效的 userId");
        }
    }

    // 自定义的编号校验规则
    public boolean isValidUserId(String userId) {
        // 校验规则：编号必须以 "2019" 开头，可以根据需要进行修改
        return userId.startsWith("2019");
    }

    // 用于将用户信息转为字符串形式
    @Override
    public String toString() {
        return "User{name='" + name + "', userId='" + userId + "'}";
    }
}

public class Experiment4 {
    public static void main(String[] args) {
        // 创建一个 Entity 对象，用于存储 User 对象
        Entity<User> userEntity = new Entity<>();

        // 模拟用户姓名和编号
        String[] userNames = {"Alice", "Bob", "Coco"};
        String[] userIds = {"20190001", "20190002", "20210003"};

        for (int i = 0; i < userNames.length; i++) {
            try {
                // 创建用户对象，插入到实体类中
                User user = new User(userNames[i], userIds[i]);
                userEntity.insert(user);
                // 如果插入成功，打印成功消息，包括用户的姓名
                System.out.println("用户 姓名：" + user.getName() +"\t编号： "+ user.getUserId() + " 插入成功");
            } catch (IllegalArgumentException e) {
                // 如果遇到无效的用户编号，捕获异常，并打印异常消息，包括异常的详细信息
                System.out.println("插入用户异常：" + e.getMessage());
                // 继续下一个迭代
                continue;
            }
        }

        // 输出用户列表
        System.out.println("用户列表: \n" + userEntity.getList());

        // 删除一个用户对象，这里假设删除第一个用户
        User user = userEntity.getList().get(0);
        userEntity.delete(user);

        // 输出删除后的用户列表
        System.out.println("删除后的用户列表: \n" + userEntity.getList());
    }
}
